// projects/oa/pages/material/pages/edit/material_edit.js
const { createStoreBindings } = require('mobx-miniprogram-bindings');
const { materialStore } = require('../../../../../../store/modules/material/materialStore');
// 导入路径辅助模块，避免重复引用
const pathImport = require('../helpers/path_import.js');
const { pageHelper, cloudHelper, fileHelper, validate } = pathImport;;

Page({

	/**
	 * 页面的初始数据
	 */
	data: {
		isLoad: false,
		isUpload: false, // 是否为上传模式
		
		// 资源表单数据
		formMaterial: {
			id: '', // 编辑模式时使用
			name: '',
			type: '',
			typeId: '',
			desc: '',
			version: '',
			fileUrl: '',
			status: '草稿', // 默认为草稿状态
			statusId: 0, // 默认为草稿状态ID
			projectId: '', // 关联项目ID
			projectName: '', // 关联项目名称
			dependencyList: [], // 依赖项
			fileList: [] // 文件列表
		},
		
		// 文件相关
		fileName: '',
		fileSize: '',
		fileObj: null,
		fileTypeText: '常见文档格式', // 根据资源类型动态设置
		
		// 状态选项
		statusIndex: 0,
		statusOptions: ['草稿', '已发布', '生产版本', '客户确认版本', '已废弃'],
		
		// 项目列表
		projectList: [],
		
		// 提交状态
		submitting: false,
		isUploading: false,
		uploadProgress: 0,

		typeOptions: ['PCB', 'BOM', '原理图', '文档', '软件', '规格书'], // 类型选项
		typeIndex: -1,

		projectOptions: [], // 项目选项
		projectIndex: -1,

		depOptions: [], // 依赖资源选项
		showSelectDep: false, // 是否显示依赖资源选择
		selectDepIndex: -1,

		isLoading: true, // 是否在加载
		btnDisabled: false, // 按钮是否禁用
	},

	/**
	 * 生命周期函数--监听页面加载
	 */
	onLoad(options) {
		// 创建MobX绑定
		this.storeBindings = createStoreBindings(this, {
			store: materialStore,
			fields: ['materialCategories'],
			actions: ['fetchMaterialCategories', 'setNeedRefresh']
		});
		
		// 设置标题
		const isUpload = options.isUpload === 'true';
		wx.setNavigationBarTitle({
			title: isUpload ? '上传资源' : '编辑资源'
		});
		
		this.setData({
			isUpload
		});
		
		// 处理 cateId
		if (options.cateId) {
			this.setData({
				'formMaterial.typeId': options.cateId
			});
			
			// 根据资源类型设置文件类型提示
			this.setFileTypeText(options.cateId);
		}
		
		// 如果是编辑模式且有id参数
		if (!isUpload && options.id) {
			this.loadResourceData(options.id);
		}
		
		// 加载分类数据和项目列表
		this.loadInitialData();
		
		setTimeout(() => {
			this.setData({
				isLoading: false
			});
		}, 500);
	},

	/**
	 * 生命周期函数--监听页面初次渲染完成
	 */
	onReady() {

	},

	/**
	 * 生命周期函数--监听页面显示
	 */
	onShow() {

	},

	/**
	 * 生命周期函数--监听页面隐藏
	 */
	onHide() {

	},

	/**
	 * 生命周期函数--监听页面卸载
	 */
	onUnload() {
		// 释放MobX绑定
		this.storeBindings.destroyStoreBindings();
	},

	/**
	 * 页面相关事件处理函数--监听用户下拉动作
	 */
	onPullDownRefresh() {

	},

	/**
	 * 页面上拉触底事件的处理函数
	 */
	onReachBottom() {

	},

	/**
	 * 用户点击右上角分享
	 */
	onShareAppMessage() {

	},

	/**
	 * 加载初始数据
	 */
	loadInitialData: async function() {
		try {
			// 加载资料分类
			await this.fetchMaterialCategories();
			
			// 加载项目列表
			const projectRes = await cloudHelper.callCloudData('project/getList', {
				page: 1,
				size: 100,
				onlyActive: true
			});
			
			if (projectRes && projectRes.data && projectRes.data.list) {
				this.setData({
					projectList: projectRes.data.list,
					projectOptions: projectRes.data.list
				});
			}
			
			this.setData({
				isLoad: true,
				isLoading: false
			});
		} catch (err) {
			console.error('加载初始数据失败', err);
			pageHelper.showNoneToast('加载数据失败，请重试');
			this.setData({
				isLoading: false
			});
		}
	},

	/**
	 * 根据资源类型设置文件类型提示
	 */
	setFileTypeText: function(cateId) {
		let text = '常见文档格式';
		
		switch (cateId) {
			case 'pcb':
				text = 'PCB设计文件 (.pcb, .brd, .dsn)';
				break;
			case 'bom':
				text = 'BOM清单 (.xlsx, .csv, .pdf)';
				break;
			case 'schematic':
				text = '原理图文件 (.sch, .pdf)';
				break;
			case 'doc':
				text = '文档 (.pdf, .docx, .xlsx)';
				break;
			case 'software':
				text = '软件文件 (.zip, .hex, .bin)';
				break;
			case 'datasheet':
				text = '规格书 (.pdf, .docx)';
				break;
		}
		
		this.setData({
			fileTypeText: text
		});
	},

	/**
	 * 加载资源数据(编辑模式)
	 */
	loadResourceData: async function(id) {
		try {
			this.setData({
				isLoading: true
			});
			
			const res = await cloudHelper.callCloudData('material/getDetail', {
				id
			});
			
			if (res && res.data) {
				// 格式化数据，将服务器数据转换为表单数据
				const formMaterial = {
					id: res.data._id || res.data.id,
					name: res.data.name || '',
					type: res.data.type || '',
					typeId: res.data.typeId || '',
					desc: res.data.desc || '',
					version: res.data.version || '',
					fileUrl: res.data.fileUrl || '',
					status: res.data.status || '草稿',
					statusId: res.data.statusId || 0,
					projectId: res.data.projectId || '',
					projectName: res.data.projectName || '',
					dependencyList: res.data.dependencyList || [],
					fileList: res.data.fileList || []
				};
				
				// 设置状态索引
				const statusIndex = this.data.statusOptions.findIndex(option => option === formMaterial.status);
				
				this.setData({
					formMaterial,
					statusIndex: statusIndex >= 0 ? statusIndex : 0,
					fileName: res.data.fileName || '',
					fileSize: res.data.fileSize || '',
					isLoading: false
				});
				
				// 根据资源类型设置文件类型提示
				if (formMaterial.typeId) {
					this.setFileTypeText(formMaterial.typeId);
				}
			}
		} catch (err) {
			console.error('加载资源数据失败', err);
			pageHelper.showNoneToast('加载资源数据失败，请重试');
			this.setData({
				isLoading: false
			});
		}
	},
	
	/**
	 * 类型选择器改变
	 */
	bindTypeChange: function (e) {
		const idx = e.detail.value;
		const typeId = idx; // 简化，实际可能需要从接口获取ID
		const type = this.data.typeOptions[idx];
		this.setData({
			'formMaterial.typeId': typeId,
			'formMaterial.type': type,
			typeIndex: idx
		});
	},

	/**
	 * 状态选择器改变
	 */
	bindStatusChange: function (e) {
		const idx = e.detail.value;
		const statusId = idx; // 简化，实际可能需要从接口获取ID
		const status = this.data.statusOptions[idx];
		this.setData({
			'formMaterial.statusId': statusId,
			'formMaterial.status': status,
			statusIndex: idx
		});
	},

	/**
	 * 项目选择器改变
	 */
	bindProjectChange: function (e) {
		const idx = e.detail.value;
		const project = this.data.projectOptions[idx];
		this.setData({
			'formMaterial.projectId': project._id || project.id,
			'formMaterial.projectName': project.PROJECT_NAME || project.model,
			projectIndex: idx
		});
	},

	/**
	 * 删除依赖资源
	 */
	delDependency: function (e) {
		const idx = e.currentTarget.dataset.idx;
		let deps = this.data.formMaterial.dependencyList;
		deps.splice(idx, 1);
		
		this.setData({
			'formMaterial.dependencyList': deps
		});
	},

	/**
	 * 选择依赖资源
	 */
	selectDependency: function (e) {
		// 打开资源选择页面
		wx.navigateTo({
			url: '../list/material_list?mode=select'
		, timeout: 10000, fail: function(err) {
        // 处理超时错误
        if (err.errMsg && err.errMsg.includes("timeout")) {
          wx.showToast({
            title: "页面加载超时，请重试",
            icon: "none"
          });
          return;
        }
        
        // 处理其他错误
        console.error("页面跳转失败:", err);
        wx.showToast({
          title: "页面跳转失败",
          icon: "none"
        });
      }});
	},

	/**
	 * 选择文件
	 */
	selectFile: function (e) {
		wx.chooseMessageFile({
			count: 1,
			type: 'file',
			success: res => {
				const tempFile = res.tempFiles[0];
				
				// 限制文件大小，例如不超过20MB
				const maxSize = 20 * 1024 * 1024;
				if (tempFile.size > maxSize) {
					pageHelper.showNoneToast('文件大小不能超过20MB');
					return;
				}

				let fileList = this.data.formMaterial.fileList || [];
				fileList.push({
					name: tempFile.name,
					size: this.formatFileSize(tempFile.size),
					tempFilePath: tempFile.path,
					progress: 0
				});

				this.setData({
					'formMaterial.fileList': fileList
				});
			}
		});
	},

	/**
	 * 格式化文件大小
	 */
	formatFileSize: function(size) {
		if (size < 1024) {
			return size + 'B';
		} else if (size < 1024 * 1024) {
			return (size / 1024).toFixed(2) + 'KB';
		} else {
			return (size / (1024 * 1024)).toFixed(2) + 'MB';
		}
	},

	/**
	 * 删除文件
	 */
	delFile: function (e) {
		const idx = e.currentTarget.dataset.idx;
		let fileList = this.data.formMaterial.fileList;
		fileList.splice(idx, 1);
		
		this.setData({
			'formMaterial.fileList': fileList
		});
	},

	/**
	 * 取消按钮
	 */
	bindCancelTap: function() {
		wx.navigateBack();
	},
	
	/**
	 * 提交按钮
	 */
	bindSubmitTap: function() {
		this._validateForm();
	},

	/**
	 * 验证表单
	 */
	_validateForm: function () {
		let data = this.data;
		
		// 表单规则
		let rules = [
			{ key: 'formMaterial.name', name: '资源名称', required: true },
			{ key: 'formMaterial.type', name: '资源类型', required: true },
			{ key: 'formMaterial.version', name: '版本号', required: true },
			{ key: 'formMaterial.status', name: '资源状态', required: true },
			{ key: 'formMaterial.projectName', name: '所属项目', required: true },
			{ key: 'formMaterial.desc', name: '资源描述', required: true }
		];

		// 上传模式下文件必填
		if (this.data.isUpload && (!data.formMaterial.fileList || data.formMaterial.fileList.length === 0)) {
			return pageHelper.showNoneToast('请选择要上传的文件');
		}
		
		// 验证规则
		return validate.check(data, rules);
	}
});